package pack.ajedrez;

import conexionWS.serviciosWS;
import android.app.Activity;
import android.os.Bundle;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TableRow.LayoutParams;
import android.widget.Toast;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;

public class Juego extends Activity {
	serviciosWS servicio = new serviciosWS();
	int fichaSeleccionada = -1;
	int[][] tablero = new int[][] { { 4, 2, 3, 5, 6, 3, 2, 4 },
			{ 1, 1, 1, 1, 1, 1, 1, 1 }, { 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1 },
			{ -4, -2, -3, -5, -6, -3, -2, -4 } };
	String nombreUsuario = "";
	String idPartida = "";
	String turno = "";

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.juego);
		Bundle bundle = getIntent().getExtras();
		nombreUsuario = bundle.getString("usuario");
		idPartida = bundle.getString("idPartida");
		cargarTablero();
	}

	public void cargarTablero() {
		final String nombreUsuarioAux = nombreUsuario;
		final String idPartidaAux = idPartida;
		turno = servicio.obtenerTurno(idPartida, nombreUsuario);
		TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout1);
		for (int x = 0; x < 8; x++) {
			TableRow tr = new TableRow(this);
			tr.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
					LayoutParams.WRAP_CONTENT));
			LinearLayout ly = new LinearLayout(this);
			ly.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
					LayoutParams.WRAP_CONTENT));
			for (int j = 0; j < 8; j++) {
				final int id = x * 8 + j;
				ImageView iv = new ImageView(this);
				iv.setId(id);
				iv.setLayoutParams(new FrameLayout.LayoutParams(
						LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
						Gravity.CENTER));
				iv.setOnClickListener(new OnClickListener() {
					public void onClick(View arg0) {
						if ((fichaSeleccionada == -1 && (turno
								.compareTo("true") == 0)))
							fichaSeleccionada = id;
						else if ((fichaSeleccionada != -1)
								&& (fichaSeleccionada != id)
								&& (turno.compareTo("true") == 0)) {
							int xAnterior = fichaSeleccionada / 8;
							int yAnterior = fichaSeleccionada - xAnterior * 8;
							int xActual = id / 8;
							int yActual = id - xActual * 8;
							String resultado = servicio.mover(idPartidaAux,
									nombreUsuarioAux, xAnterior + ","
											+ yAnterior + "," + xActual + ","
											+ yActual);
							if (resultado.compareTo("true") == 0) {
								int valorFicha = tablero[xAnterior][yAnterior];
								tablero[xAnterior][yAnterior] = 0;
								tablero[xActual][yActual] = valorFicha;
								ponerFichas();
								Thread hilo = new Thread() {
									public void run() {
										String result = servicio.obtenerTurno(
												idPartida, nombreUsuario);
										while (result.compareTo("false") == 0) {
											try {
												Thread.sleep(10);
											} catch (InterruptedException e) {
											}
											result = servicio.obtenerTurno(
													idPartida, nombreUsuario);
										}
										turno = "true";
										try {
											Thread.sleep(10);
										} catch (InterruptedException e) {
										}
										ponerFichas();
										this.stop();
									}
								};
								hilo.start();
							}
						} else
							fichaSeleccionada = -1;
						Toast toast = Toast.makeText(Juego.this, ""
								+ fichaSeleccionada + " " + turno + " " + id,
								Toast.LENGTH_SHORT);
						toast.show();
					}
				});
				FrameLayout fl = new FrameLayout(this);
				fl.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
						LayoutParams.WRAP_CONTENT));

				fl.setOnClickListener(new OnClickListener() {
					public void onClick(View arg0) {
						if ((fichaSeleccionada == -1 && (turno
								.compareTo("true") == 0)))
							fichaSeleccionada = id;
						else if ((fichaSeleccionada != -1)
								&& (fichaSeleccionada != id)
								&& (turno.compareTo("true") == 0)) {
							int xAnterior = fichaSeleccionada / 8;
							int yAnterior = fichaSeleccionada - xAnterior * 8;
							int xActual = id / 8;
							int yActual = id - xActual * 8;
							String resultado = servicio.mover(idPartidaAux,
									nombreUsuarioAux, xAnterior + ","
											+ yAnterior + "," + xActual + ","
											+ yActual);
							if (resultado.compareTo("true") == 0) {
								int valorFicha = tablero[xAnterior][yAnterior];
								tablero[xAnterior][yAnterior] = 0;
								tablero[xActual][yActual] = valorFicha;
								ponerFichas();
								Thread hilo = new Thread() {
									public void run() {
										String result = servicio.obtenerTurno(
												idPartida, nombreUsuario);
										while (result.compareTo("false") == 0) {
											try {
												Thread.sleep(10);
											} catch (InterruptedException e) {
											}
											result = servicio.obtenerTurno(
													idPartida, nombreUsuario);
										}
										turno = "true";
										try {
											Thread.sleep(10);
										} catch (InterruptedException e) {
										}
										ponerFichas();
										this.stop();
									}
								};
								hilo.start();
								fichaSeleccionada = -1;
							}

						} else
							fichaSeleccionada = -1;
						Toast toast = Toast.makeText(Juego.this, ""
								+ fichaSeleccionada + " " + turno + " " + id,
								Toast.LENGTH_SHORT);
						toast.show();
					}
				});
				if (esPar(x) && esPar(j))
					fl.setBackgroundResource(R.drawable.cuadroclaro);
				else if (esPar(x) && !esPar(j))
					fl.setBackgroundResource(R.drawable.cuadrooscuro);
				if (!esPar(x) && !esPar(j))
					fl.setBackgroundResource(R.drawable.cuadroclaro);
				else if (!esPar(x) && esPar(j))
					fl.setBackgroundResource(R.drawable.cuadrooscuro);
				fl.addView(iv);
				ly.addView(fl);
			}
			tr.addView(ly);
			tableLayout.addView(tr);
		}
		ponerFichas();
	}

	public void ponerFichas() {
		for (int x = 0; x < 8; x++) {
			for (int j = 0; j < 8; j++) {
				if (tablero[x][j] == 0) {
					ImageView iv = (ImageView) findViewById(x * 8 + j);
					iv.setBackgroundResource(0);
				} else if (tablero[x][j] == -1) {
					ImageView iv = (ImageView) findViewById(x * 8 + j);
					iv.setBackgroundResource(R.drawable.peonblanco);
				} else if (tablero[x][j] == -2) {
					ImageView iv = (ImageView) findViewById(x * 8 + j);
					iv.setBackgroundResource(R.drawable.caballoblanco);
				} else if (tablero[x][j] == -3) {
					ImageView iv = (ImageView) findViewById(x * 8 + j);
					iv.setBackgroundResource(R.drawable.alfilblanco);
				} else if (tablero[x][j] == -4) {
					ImageView iv = (ImageView) findViewById(x * 8 + j);
					iv.setBackgroundResource(R.drawable.torreblanca);
				} else if (tablero[x][j] == -5) {
					ImageView iv = (ImageView) findViewById(x * 8 + j);
					iv.setBackgroundResource(R.drawable.reinablanca);
				} else if (tablero[x][j] == -6) {
					ImageView iv = (ImageView) findViewById(x * 8 + j);
					iv.setBackgroundResource(R.drawable.reyblanco);
				}

				else if (tablero[x][j] == 1) {
					ImageView iv = (ImageView) findViewById(x * 8 + j);
					iv.setBackgroundResource(R.drawable.peonnegro);
				} else if (tablero[x][j] == 2) {
					ImageView iv = (ImageView) findViewById(x * 8 + j);
					iv.setBackgroundResource(R.drawable.caballonegro);
				} else if (tablero[x][j] == 3) {
					ImageView iv = (ImageView) findViewById(x * 8 + j);
					iv.setBackgroundResource(R.drawable.alfilnegro);
				} else if (tablero[x][j] == 4) {
					ImageView iv = (ImageView) findViewById(x * 8 + j);
					iv.setBackgroundResource(R.drawable.torrenegra);
				} else if (tablero[x][j] == 5) {
					ImageView iv = (ImageView) findViewById(x * 8 + j);
					iv.setBackgroundResource(R.drawable.reinanegra);
				} else if (tablero[x][j] == 6) {
					ImageView iv = (ImageView) findViewById(x * 8 + j);
					iv.setBackgroundResource(R.drawable.reynegro);
				}
			}
		}
	}

	public boolean esPar(int valor) {
		if (valor % 2 == 0)
			return true;
		else
			return false;
	}

}